import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from pylab import mpl

# 设置字体为中文
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 使用 requests 获取网页内容
url = 'https://fangjia.gotohui.com/'
response = requests.get(url)
response.encoding = 'utf-8'  # 指定编码为 utf-8
soup = BeautifulSoup(response.text, "html.parser")

# 使用 BeautifulSoup 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')

# 检查表格类名或ID
table = soup.find('table')
if table is None:
    print("No table found")
else:
    # 提取数据
    Prices_data = []
    rows = table.find_all('tr')[1:21]  # 只爬取前20条信息
    for row in rows:
        cols = row.find_all('td')
        if cols:
            rank = cols[0].text.strip()
            city = cols[1].text.strip()
            Secondary = cols[2].text.strip()
            Year_on_year = cols[3].text.strip()
            Chain = cols[4].text.strip()
            New_house = cols[5].text.strip()
            Prices_data.append([rank, city, Secondary, Year_on_year,Chain, New_house])

    # 将数据整理成 DataFrame
    df = pd.DataFrame(Prices_data, columns=['排名', '城市', '二手房(元/㎡)', '同比(去年)', '环比(上月)','新房(元/㎡)'])

    # 将数据写入 Excel 文件
    excel_file = '小组12.xlsx'
    df.to_excel(excel_file, index=False)

    # 读取 Excel 文件中的数据
    df = pd.read_excel(excel_file)

    # 可视化分析
    # 柱状图
    plt.figure(figsize=(10, 6))
    plt.bar(df['城市'], df['二手房(元/㎡)'], color='skyblue')
    plt.xlabel('城市')
    plt.ylabel('房价(元/㎡)')
    plt.title(' 2024年3月全国房价排行榜')
    plt.xticks(rotation=90)
    plt.tight_layout()
    plt.savefig('小组12_bar_chart.png')
    plt.show()

    # 折线图
    plt.figure(figsize=(10, 6))
    plt.plot(df['城市'], df['二手房(元/㎡)'], marker='o', color='orange', label='二手房(元/㎡)')
    plt.plot(df['城市'], df['新房(元/㎡)'], marker='x', color='green', label='新房(元/㎡)')
    plt.xlabel('城市')
    plt.ylabel('全国房价）')
    plt.title(' 2024年3月全国房价排行榜')
    plt.xticks(rotation=90)
    plt.legend()
    plt.tight_layout()
    plt.savefig('小组12_line_chart.png')
    plt.show()

    # 词云
    text = ' '.join(df['城市'])
    wordcloud = WordCloud(font_path='simhei.ttf', width=800, height=400, background_color='white').generate(text)
    plt.figure(figsize=(10, 6))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.title('城市词云')
    plt.axis('off')
    plt.tight_layout()
    plt.savefig('小组12_wordcloud.png')
    plt.show()
